package com.itchu.common.exption;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

/**
 * @ControllerAdvice是一个@Component，用于定义@ExceptionHandler，
 * @InitBinder和@ModelAttribute方法，适用于所有使用@RequestMapping方法。
 *
 * Spring4之前，@ControllerAdvice在同一调度的Servlet中协助所有控制器。
 * Spring4已经改变：@ControllerAdvice支持配置控制器的子集，而默认的行为仍然可以利用。
 *
 * 在Spring4中， @ControllerAdvice通过annotations(),
 * basePackageClasses(), basePackages()方法定制用于选择控制器子集。
 */
@ControllerAdvice
public class MusicExceptionControler {

    @ExceptionHandler(MusicException.class)
    public ResponseEntity<MusicExceptionResult> handlerMusicException(MusicException e) {
        return ResponseEntity.status(e.getStatus()).body(new MusicExceptionResult(e));
    }
}
